﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using Website.Logger;
using DAL;
using BOL;
using System.Web.Script.Services;
using System.Web.Services;
using WebLib;
using UtilityExtensions;

namespace UILGestion.ObraAdmin.RecepcionDoc
{
    public partial class RecepcionDocReadForm : System.Web.UI.Page
    {
       

    

        private void FormatForm()
        {
            //--------------------
            int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
        
            bool acceso = new DAL.FormularioAcceso().VerificarAcceso(DbUtil.Db,
                idEmpleadoEmisor,
                9, //FR
                int.Parse(idObra.Value),
                1); //lectura
            //------------------------- 
            // los paneles presentes en el formulario
            pnlMain.Visible = true;
            
            
            ShowAllComboBoxNew();
            
            LoadRecepcionDoc(int.Parse(internalid.Value));
            
            
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {


                if (!Page.IsPostBack)
                {
                   
                    idObra.Value = (string)Request.QueryString["idObra"];
                    internalid.Value = (string)Request.QueryString["id"];
                    menuObraCtrl1.loadMenu(int.Parse(idObra.Value), Request.AppRelativeCurrentExecutionFilePath);
                   
                    FormatForm();

               

                }


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        
        private void ShowAllComboBoxNew()
        {
            
            
        }



      


        protected void btnContinue_OnClick(object sender, EventArgs e)
        {
         
            try
            {
            if ((sender as Button).Text == refreshButton.Text)
            {
                FormatForm();
            }
            if ((sender as Button).Text == anteriorButton.Text)
            {
                DAL.RecepcionDoc oc = new DAL.RecepcionDoc();
                int idAnterior = oc.getidAnterior(DbUtil.Db, int.Parse(internalid.Value), int.Parse(idObra.Value));
                Response.Redirect(String.Format("RecepcionDocReadForm.aspx?id={0}&idObra={1}", idAnterior, idObra.Value), true);
            }
            if ((sender as Button).Text == siguienteButton.Text)
            {
                DAL.RecepcionDoc oc = new DAL.RecepcionDoc();
                int idSiguiente = oc.getidSiguiente(DbUtil.Db, int.Parse(internalid.Value), int.Parse(idObra.Value));
                Response.Redirect(String.Format("RecepcionDocReadForm.aspx?id={0}&idObra={1}", idSiguiente, idObra.Value), true);
            }
                if ((sender as Button).Text == nuevoButton.Text)
            {
                Response.Redirect(String.Format("RecepcionDocInsertOPT1Form.aspx?id={0}&idObra={1}&type=A",internalid.Value,idObra.Value),true);
            }
                if ((sender as Button).Text == EliminarButton.Text)
                {
                    RecepcionDocBL bol = new RecepcionDocBL();
                    bol.Delete(int.Parse(internalid.Value));
                    Response.Redirect(String.Format("RecepcionDocListForm.aspx?idObra={0}", idObra.Value), false);
                }
                
           }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);
               

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);
               
            }
        }

  
     
       


        private void LoadRecepcionDoc(int idRececpcionDoc)
        {
         
            RecepcionDocBL bol = new RecepcionDocBL();

            DAL.RecepcionDoc info = DbUtil.Db.RecepcionDocs.Single(p => p.idInternal == idRececpcionDoc);
            //OrdenInfo ocBol = new OrdenCompraBL().loadOrden(info.idOrdenCompra);
           
            Ordenpanel.GroupingText = info.OrdenCompra.TipoOrden.descripcion;

            string tipoFormulario = (info.OrdenCompra.idTipoOrden > 1 ? "GastoObraReadForm.aspx" : "OrdenCompraReadForm.aspx");
            //--------datos de la orden ce compra
                    docRefLabel.Text =string.Format("{0}-{1}",
                                                info.OrdenCompra.TipoOrden.simbol, 
                                                info.OrdenCompra.numDocumento);
                    docRefLabel.PostBackUrl =
                                                String.Format("~/ObraAdmin/OrdenCompras/{2}?id={0}&idObra={1}",
                                                info.idOrden,
                                                info.OrdenCompra.idObra,
                                                tipoFormulario);

                    comparativoHPL.Text = info.OrdenCompra.idComparativo == null ? "" : info.OrdenCompra.Comparativo.numDocumento;
                    comparativoHPL.NavigateUrl=string.Format("~/ObraAdmin/Comparativos/ComparativoReadForm.aspx?id={0}&idObra={1}",
                                                info.OrdenCompra.idComparativo,
                                                info.OrdenCompra.idObra);
            //------------caso de  NC
                    if (info.idTipoDocumento.Value == 6)
                    {
                        //debe existir factura
                        var recepciondoc = DbUtil.Db.RecepcionDocs.SingleOrDefault(p => p.OrdenCompra.idInternal == info.idOrden & p.idTipoDocumento == 2);
                        if (recepciondoc != null)
                        {
                            docRefHLK.Text = recepciondoc.numDocumento;
                            docRefHLK.NavigateUrl = "RecepcionDocReadForm.aspx?idObra={0}&id={1}".
                                                    Fmt(idObra.Value, 
                                                    recepciondoc.idInternal);

                        }
                    }
            //-------------------

                    monedaLabel.Text = info.OrdenCompra.Moneda1.descripcion;
                    formaPagoLabel.Text = info.OrdenCompra.FormaPago.descripcion;
                    
            
                    simbolLabel1.Text = info.OrdenCompra.Moneda1.simbol;
                    simbolLabel2.Text = info.OrdenCompra.Moneda1.simbol;
                    simbolLabel3.Text = info.OrdenCompra.Moneda1.simbol;

            //------------------en caso de existir el anticipo
            if (info.idOrdenAnticipo != null)
            {
                OrdenAnticipo ocAnticipo = DbUtil.Db.OrdenAnticipos.Single(p => p.idInternal == info.idOrdenAnticipo);
                netoLabel.Text = ocAnticipo.subTotal.ToString("N");
                igvtotalLabel.Text = ocAnticipo.IGVTotal.ToString("N");
                totalTextBox.Text = ocAnticipo.total.ToString("N");
                fechaOCLabel.Text = ocAnticipo.fecha.ToShortDateString();
            }
            else
            {
                netoLabel.Text = info.OrdenCompra.subTotal.Value.ToString("N");
                igvtotalLabel.Text = info.OrdenCompra.IGVTotal.Value.ToString("N");
                totalTextBox.Text = info.OrdenCompra.total.Value.ToString("N");
                fechaOCLabel.Text = info.OrdenCompra.fechaEmision.Value.ToShortDateString();
            }
            
            //------------------ Recepcion Documento 


            fechaTextBox.Text = info.fechaRecep.Value.ToShortDateString();
            fechaEmisonTextBox.Text = info.fechaEmisionDoc.Value.ToShortDateString();
            fechaVencimTextBox.Text = info.fechaVencimientoDoc.Value.ToShortDateString();
            TipoCambioLabel.Text = info.tipoCambio.ToString();
            monedaDropDownList.Text = info.Moneda.descripcion;
            tipoDocDropDownList.Text = info.DocumentoTipo.descripcion;
            documentoTextBox.Text = info.numDocumento;
            
            frLabel.Text = info.numRecepcion;
            glosaLabel.Text = info.descripcion;
            FechaPagoTXT.Text = info.fechaPago==null?"":info.fechaPago.Value.ToShortDateString();

              //en caso de RH
            factPNL.Visible =info.idTipoDocumento == 3?false: true;
            honorarioPNL.Visible = info.idTipoDocumento == 3?true:false;
            
            totalNetoTXT.Text = string.Format("{0} {1:N}", info.Moneda.simbol , info.netoDoc);
            IGVTXT.Text = string.Format("{0} {1:N}", info.Moneda.simbol, info.igvDoc);
            totalFinalTXT.Text = string.Format("{0} {1:N}", info.Moneda.simbol, info.totalDoc);
            baseInafectoLBL.Text = string.Format("{0} {1:N}", info.Moneda.simbol, info.impInafecto);
            iscLBL.Text = string.Format("{0} {1:N}", info.Moneda.simbol, info.impISC);

            // para el caso de visualizar el calculo de la retencion al registrar el recibo
            // estos valores no seutiliza para el calculo de  consumo del presupuesto

            importeHonorarioLBL.Text = string.Format("{0} {1:N}", info.Moneda.simbol, info.totalDoc);
            renta4taLBL.Text = string.Format("{0} {1:N}", info.Moneda.simbol, info.renta4taDoc);
            totalLBL.Text = string.Format("{0} {1:N}", info.Moneda.simbol, info.totalDoc - info.renta4taDoc);

            //-------------------


            DAL.Menu menu = DbUtil.Db.Menus.Single(p => p.idInternal == 112);
            //----------------------             
            string val1 = String.Format("{0}?Type=A&id={1}",
                                                        menu.url,
                                                        info.idProveedor);
            ordenCompraHLk.Text = info.proveedor;
            ordenCompraHLk.NavigateUrl = "javascript:loadTabFromForm('tab{0}','{1}','{2}');".
                                    Fmt(menu.idAplicacion,
                                    menu.Aplicacion.title,
                                    val1);

            //--------------------



        }
       

       

       




       


    }

}
